//
// Created by ashkore on 23-9-2.
//


#ifndef SR04_SR04_H
#define SR04_SR04_H

#include "stm32f1xx_hal.h"

// HC-SR04 struct
typedef struct {
    uint16_t echo_channel;  // Echo pin timer channel
    uint8_t  capture_flag;  // Echo pin capture flag
    uint32_t start_counter;  // Counter value at rising edge
    uint32_t end_counter;  // Counter value at falling edge
    uint32_t distance;  // Distance in mm
    uint32_t last_distance;  // Last distance
    uint16_t tim_update_count;  // Timer update count
} sr04_t;

// HC-SR04 functions
void sr04_init(sr04_t *sr04_struct);
void sr04_trigger(sr04_t *sr04_struct);
void sr04_read_distance(sr04_t *sr04_struct);  // This function should be called in the timer input capture callback

#endif //SR04_SR04_H




/**
（1）给超声波模块接⼊电源和地
（2）给脉冲触发引脚（trig）输⼊⼀个⻓为20us的⾼电平⽅波
（3）输⼊⽅波后，模块会⾃动发射8个40KHz的声波，与此同时回波引脚echo端的电平会由0变为1;
（此时应该启动定时器计时）
（4）当超声波返回被模块接收到时，回波引脚端的电平会由1变为0;（此时应该停⽌定时器计数），
    定时器记下的这个时间即为超声波由发射到返回的总时⻓
（5）根据声⾳在空⽓中的速度为344⽶/秒，即可计算出所测的距离。

 * 
 */